Pagerinkite WebGL našumą optimizuodami GPU atminties pralaidumą. Sužinokite perdavimo spartos didinimo ir sklandesnio atvaizdavimo technikas.
WebGL GPU atminties pralaidumo optimizavimas: perdavimo spartos didinimas
Sparčiai besivystančiame interneto svetainių kūrimo pasaulyje WebGL tapo kertiniu akmeniu kuriant vizualiai turtingas ir interaktyvias patirtis tiesiogiai naršyklėje. Jo gebėjimas išnaudoti grafikos apdorojimo įrenginio (GPU) galią leidžia kūrėjams kurti programas nuo sudėtingų 3D žaidimų iki duomenų vizualizavimo įrankių. Tačiau šių programų našumas priklauso nuo kelių veiksnių, o GPU atminties pralaidumas yra vienas iš svarbiausių. Šiame tinklaraščio įraše gilinamasi į WebGL GPU atminties pralaidumo optimizavimo subtilybes, daugiausia dėmesio skiriant perdavimo spartos didinimo metodams ir galiausiai siekiant užtikrinti sklandesnę, labiau reaguojančią vartotojo patirtį įvairiuose įrenginiuose visame pasaulyje.
GPU atminties pralaidumo ir jo svarbos supratimas
Prieš pradedant nagrinėti optimizavimo strategijas, svarbu suprasti pagrindines sąvokas. GPU atminties pralaidumas reiškia greitį, kuriuo duomenys gali būti perduodami tarp GPU ir kitų sistemos dalių, pavyzdžiui, procesoriaus (CPU) ar paties GPU vidinės atminties. Ši perdavimo sparta matuojama gigabaitais per sekundę (GB/s) ir yra ribojantis veiksnys daugelyje WebGL programų. Kai pralaidumas yra nepakankamas, tai gali sukelti kliūtis, dėl kurių atsiranda našumo problemų, tokių kaip lėtas atvaizdavimas, praleisti kadrai ir bendras vangumas.
Apsvarstykite pasaulinį scenarijų: vartotojas Tokijuje naudojasi WebGL pagrindu sukurtu architektūrinės vizualizacijos įrankiu, skirtu demonstruoti nekilnojamąjį turtą Dubajuje. Greitis, kuriuo tekstūros, modeliai ir kiti duomenys yra įkeliami ir atvaizduojami, tiesiogiai veikia vartotojo patirtį. Jei atminties pralaidumas yra ribotas, vartotojas gali patirti vėlavimus ir varginančią sąveiką, nepaisant turinio kokybės.
Kodėl atminties pralaidumas yra svarbus
- Duomenų perdavimo kliūtys: Didelių duomenų kiekių (tekstūrų, viršūnių duomenų ir kt.) perdavimas į GPU greitai sunaudoja pralaidumą. Nepakankamas pralaidumas sukuria kliūtį, lėtinančią atvaizdavimą.
- Tekstūrų įkėlimas: Aukštos raiškos tekstūros reikalauja daug atminties. Efektyvus tekstūrų įkėlimas ir valdymas yra labai svarbūs našumui.
- Viršūnių duomenys: Sudėtingiems 3D modeliams reikia didelio kiekio viršūnių duomenų, todėl juos reikia efektyviai perduoti į GPU.
- Kadrų dažnis: Pralaidumo apribojimai tiesiogiai veikia kadrų dažnį. Mažesnis pralaidumas lemia mažesnį kadrų dažnį, todėl programa atrodo mažiau reaguojanti.
- Energijos suvartojimas: Atminties pralaidumo optimizavimas taip pat gali netiesiogiai prisidėti prie mažesnio energijos suvartojimo, o tai ypač svarbu mobiliesiems įrenginiams.
Dažniausios WebGL atminties pralaidumo kliūtys
Keletas sričių gali prisidėti prie GPU atminties pralaidumo kliūčių WebGL programose. Šių kliūčių nustatymas yra pirmasis žingsnis link veiksmingo optimizavimo.
1. Tekstūrų valdymas
Tekstūros dažnai sudaro didžiausią dalį duomenų, perduodamų į GPU. Prastai valdomos tekstūros yra dažna pralaidumo problemų priežastis.
- Aukštos raiškos tekstūros: Pernelyg didelės raiškos tekstūrų naudojimas, neatsižvelgiant į ekrano dydį, yra didelis pralaidumo eikvojimas.
- Nesuspaustos tekstūros: Nesuspaustų tekstūrų formatai sunaudoja daugiau atminties nei suspausti, todėl padidėja pralaidumo poreikis.
- Dažnas tekstūrų įkėlimas: Nuolatinis tų pačių tekstūrų įkėlimas į GPU eikvoja pralaidumą.
Pavyzdys: Pasaulinė el. prekybos platforma, rodanti produktų vaizdus. Jei kiekvienam produkto vaizdui naudojama aukštos raiškos nesuspausta tekstūra, puslapio įkėlimo laikas bus žymiai paveiktas, ypač vartotojams regionuose, kuriuose interneto ryšys lėtesnis.
2. Viršūnių duomenų valdymas
Viršūnių duomenys, atspindintys 3D modelių geometrinę informaciją, taip pat prisideda prie pralaidumo naudojimo.
- Pernelyg daug viršūnių duomenų: Modeliams su dideliu viršūnių skaičiumi, net jei jie vizualiai paprasti, reikia daugiau duomenų perdavimo.
- Neoptimizuoti viršūnių formatai: Nereikalingai didelio tikslumo viršūnių formatų naudojimas gali padidinti perduodamų duomenų kiekį.
- Dažni viršūnių duomenų atnaujinimai: Nuolatinis viršūnių duomenų atnaujinimas, pavyzdžiui, animuotiems modeliams, reikalauja didelio pralaidumo.
Pavyzdys: Pasaulinis 3D žaidimas, naudojantis didelio daugiakampių skaičiaus modelius, patirs našumo sumažėjimą įrenginiuose su ribotu GPU atminties pralaidumu. Tai paveiks žaidimų patirtį žaidėjams tokiose šalyse kaip Indija, kur mobilieji žaidimai yra populiarūs.
3. Buferių valdymas
WebGL naudoja buferius (viršūnių buferius, indeksų buferius) duomenims saugoti GPU. Neefektyvus buferių valdymas gali lemti pralaidumo švaistymą.
- Nereikalingi buferio atnaujinimai: Dažnas buferių atnaujinimas, kai to nereikia, yra išteklių švaistymas.
- Neefektyvus buferio paskirstymas: Dažnas buferių paskirstymas ir atlaisvinimas gali pridėti papildomų išlaidų.
- Neteisingos buferio naudojimo vėliavėlės: Neteisingų buferio naudojimo vėliavėlių (pvz., `gl.STATIC_DRAW`, `gl.DYNAMIC_DRAW`) naudojimas gali pakenkti našumui.
Pavyzdys: Duomenų vizualizavimo programa, pateikianti realaus laiko akcijų rinkos duomenis, turi dažnai atnaujinti savo buferius. Neteisingas buferio naudojimas gali žymiai paveikti kadrų dažnį ir reakcijos laiką, o tai paveiks vartotojus finansų centruose, tokiuose kaip Londonas ar Niujorkas.
4. Šešėlių kompiliavimas ir „Uniform“ atnaujinimai
Nors tai nėra tiesiogiai susiję su atminties pralaidumu, šešėlių kompiliavimas ir dažni „uniform“ atnaujinimai gali netiesiogiai paveikti našumą, vėlindami atvaizdavimą ir sunaudodami procesoriaus išteklius, kurie kitu atveju galėtų būti skirti atminties perdavimo valdymui.
- Sudėtingi šešėliai: Sudėtingesniems šešėliams kompiliuoti reikia daugiau laiko.
- Dažni „Uniform“ atnaujinimai: Per dažnas „uniform“ kintamųjų (reikšmių, perduodamų šešėliams) atnaujinimas gali tapti kliūtimi, ypač jei atnaujinimai apima didelį duomenų perdavimą.
Pavyzdys: WebGL pagrindu sukurta oro sąlygų simuliacija, rodanti skirtingus oro modelius visame pasaulyje ir naudojanti sudėtingus šešėlius vizualiniams efektams, labai laimėtų optimizavus šešėlių kompiliavimą ir „uniform“ atnaujinimus.
Optimizavimo technikos: perdavimo spartos didinimas
Dabar panagrinėkime praktines technikas, skirtas optimizuoti WebGL našumą, sprendžiant aukščiau minėtas kliūtis. Šiomis technikomis siekiama pagerinti GPU atminties pralaidumo panaudojimą ir padidinti perdavimo spartą.
1. Tekstūrų optimizavimas
Tekstūrų optimizavimas yra labai svarbus siekiant sumažinti duomenų perdavimą.
- Tekstūrų suspaudimas: Naudokite tekstūrų suspaudimo formatus, tokius kaip ETC1/2 (mobiliems įrenginiams) arba S3TC/DXT (staliniams kompiuteriams), kad žymiai sumažintumėte tekstūros dydį ir atminties pralaidumo naudojimą. WebGL 2.0 palaiko įvairius suspaudimo formatus, o naršyklės palaikymas skiriasi priklausomai nuo įrenginio. Apsvarstykite galimybę naudoti atsarginius variantus įrenginiams, kurie nepalaiko konkrečių formatų.
- „Mipmapping“: Generuokite „mipmaps“ tekstūroms. „Mipmaps“ yra iš anksto apskaičiuotos, mažesnės raiškos tekstūros versijos. GPU gali pasirinkti tinkamą „mipmap“ lygį pagal objekto atstumą nuo kameros, taip taupant pralaidumą naudojant mažesnes tekstūras, kai tai įmanoma.
- Tekstūros dydis ir raiška: Keiskite tekstūrų dydį, kad atitiktų vizualinius reikalavimus. Nenaudokite 4K raiškos tekstūros mažam vartotojo sąsajos elementui, kuris rodomas tik mažesne raiška. Atsižvelkite į įrenginio ekrano raišką.
- Tekstūrų atlasai: Sujunkite kelias mažas tekstūras į vieną didesnį tekstūrų atlasą. Tai sumažina tekstūrų susiejimų skaičių ir gali pagerinti našumą. Tai ypač naudinga vartotojo sąsajos elementams ar mažoms pasikartojančioms tekstūroms.
- Atidėtas įkėlimas ir tekstūrų transliavimas: Įkelkite tekstūras pagal poreikį, o ne viską iš karto. Tekstūrų transliavimas leidžia GPU atvaizduoti mažos raiškos tekstūros versiją, kol fone įkeliama visa raiška. Tai suteikia sklandesnę pradinio įkėlimo patirtį, ypač didelėms tekstūroms.
Pavyzdys: Pasaulinė turizmo svetainė, rodanti lankytinas vietas visame pasaulyje, turėtų teikti pirmenybę optimizuotoms tekstūroms. Naudokite suspaustas tekstūras turistinių objektų (pvz., Eifelio bokšto Paryžiuje, Didžiosios kinų sienos) nuotraukoms ir generuokite „mipmaps“ kiekvienai tekstūrai. Tai užtikrins greitą įkėlimo patirtį vartotojams bet kuriame įrenginyje.
2. Viršūnių duomenų optimizavimas
Efektyvus viršūnių duomenų valdymas yra būtinas optimaliam našumui.
- Modelio supaprastinimas: Supaprastinkite modelius sumažindami viršūnių skaičių. Tai galima padaryti rankiniu būdu 3D modeliavimo programoje arba automatiškai naudojant tokias technikas kaip tinklo decimacija.
- Viršūnių atributai: Atidžiai pasirinkite viršūnių atributus. Įtraukite tik būtinus atributus (padėtis, normalės, tekstūros koordinatės ir kt.).
- Viršūnių formatas: Naudokite mažiausius įmanomus duomenų tipus viršūnių atributams. Pavyzdžiui, naudokite `gl.FLOAT`, kai gali pakakti `gl.HALF_FLOAT` (jei palaikoma).
- Viršūnių buferio objektai (VBO) ir elementų buferio objektai (EBO): Naudokite VBO ir EBO, kad saugotumėte viršūnių ir indeksų duomenis GPU atmintyje. Tai leidžia išvengti duomenų perdavimo kiekviename kadre.
- „Instancing“ (kartojimas): Naudokite „instancing“ metodą, kad efektyviai pieštumėte kelis to paties modelio egzempliorius. Tam reikia perduoti viršūnių duomenis tik vieną kartą.
- Viršūnių duomenų kaupimas talpykloje: Kaupkite talpykloje viršūnių duomenis, kurie dažnai nesikeičia. Venkite tų pačių duomenų pakartotinio įkėlimo į GPU kiekviename kadre.
Pavyzdys: WebGL pagrindu sukurtas žaidimas su didžiuliu atviru pasauliu. Viršūnių duomenų optimizavimas yra labai svarbus. Naudokite „instancing“ metodą medžiams, uoloms ir kitiems pasikartojantiems objektams piešti. Taikykite modelio supaprastinimo technikas tolimesniems objektams, kad sumažintumėte atvaizduojamų viršūnių skaičių.
3. Buferių valdymo optimizavimas
Tinkamas buferių valdymas yra gyvybiškai svarbus siekiant sumažinti pralaidumo naudojimą.
- Buferio naudojimo vėliavėlės: Kurdami buferius naudokite teisingas buferio naudojimo vėliavėles. `gl.STATIC_DRAW` duomenims, kurie retai keičiasi, `gl.DYNAMIC_DRAW` dažnai atnaujinamiems duomenims ir `gl.STREAM_DRAW` duomenims, kurie keičiasi kiekviename kadre.
- Buferio atnaujinimai: Sumažinkite buferio atnaujinimų skaičių. Venkite nereikalingų buferio atnaujinimų. Atnaujinkite tik tą buferio dalį, kuri pasikeitė.
- Buferio susiejimas: Apsvarstykite galimybę naudoti `gl.mapBufferRange()` (jei palaikoma), kad tiesiogiai pasiektumėte buferio atmintį. Kai kuriais atvejais tai gali būti greičiau nei `gl.bufferSubData()`, ypač dažniems, bet mažiems atnaujinimams.
- Buferių fondas: Dinaminiams buferiams įdiekite buferių fondą. Iš naujo naudokite esamus buferius, užuot juos dažnai kūrę ir naikinę.
- Venkite dažno buferių susiejimo: Sumažinkite buferių susiejimo ir atsiejimo kartų skaičių. Grupuokite piešimo iškvietimus, kad sumažintumėte papildomas išlaidas.
Pavyzdys: Realaus laiko grafikų vizualizavimo įrankis, rodantis dinaminius duomenis. Naudokite `gl.DYNAMIC_DRAW` viršūnių buferiui, kuriame yra duomenų taškai. Atnaujinkite tik tas buferio dalis, kurios pasikeitė, užuot perkrovę visą buferį kiekviename kadre. Įdiekite buferių fondą, kad efektyviai valdytumėte buferio išteklius.
4. Šešėlių ir „Uniform“ optimizavimas
Šešėlių naudojimo ir „uniform“ atnaujinimų optimizavimas pagerina bendrą našumą.
- Šešėlių kompiliavimas: Iš anksto sukompiliuokite šešėlius, jei įmanoma, kad išvengtumėte kompiliavimo vykdymo metu. Naudokite šešėlių kaupimo talpykloje mechanizmus.
- Šešėlių sudėtingumas: Optimizuokite šešėlių kodą efektyvumui. Supaprastinkite šešėlių logiką, sumažinkite skaičiavimų skaičių ir venkite nereikalingo šakojimosi.
- „Uniform“ atnaujinimai: Sumažinkite „uniform“ atnaujinimų dažnumą. Jei įmanoma, grupuokite „uniform“ atnaujinimus. Apsvarstykite galimybę naudoti „uniform“ buferius (UBO) WebGL 2.0, kad efektyviai atnaujintumėte didelius „uniform“ rinkinius.
- „Uniform“ duomenų tipai: Naudokite efektyviausius duomenų tipus „uniform“ kintamiesiems. Jei įmanoma, rinkitės viengubo tikslumo slankiojo kablelio skaičius vietoj dvigubo.
- „Uniform“ blokų objektai (UBO): Dažniems „uniform“ atnaujinimams naudokite „Uniform“ blokų objektus (UBO). UBO leidžia sugrupuoti kelis „uniform“ kintamuosius, įkelti juos į GPU vienu kartu ir efektyviau juos atnaujinti. Pastaba: WebGL 1.0 nepalaiko UBO, tačiau WebGL 2.0 palaiko.
Pavyzdys: WebGL pagrindu sukurta sudėtingos fizinės sistemos simuliacija. Optimizuokite šešėlius, kad sumažintumėte skaičiavimo apkrovą. Sumažinkite „uniform“ atnaujinimų skaičių tokiems parametrams kaip gravitacija ir vėjo kryptis. Apsvarstykite galimybę naudoti „uniform“ buferius, jei turite daug atnaujinamų parametrų.
5. Kodo lygio optimizavimas
Pagrindinio JavaScript kodo optimizavimas gali dar labiau pagerinti WebGL našumą.
- JavaScript profiliavimas: Naudokite naršyklės kūrėjų įrankius (Chrome DevTools, Firefox Developer Tools ir kt.), kad profiliuotumėte savo JavaScript kodą ir nustatytumėte našumo kliūtis.
- Venkite nereikalingų operacijų: Pašalinkite visus nereikalingus skaičiavimus, ciklus ir funkcijų iškvietimus.
- Kaupimas talpykloje: Kaupkite talpykloje dažnai pasiekiamus duomenis, tokius kaip tekstūrų rankenėlės, buferio objektai ir „uniform“ vietos.
- Optimizuokite šiukšlių surinkimui: Sumažinkite atminties paskirstymą ir atlaisvinimą, kad sumažintumėte šiukšlių surinkimo poveikį našumui.
- Naudokite „Web Workers“: Perkelkite skaičiavimams imlias užduotis į „Web Workers“, kad neužblokuotumėte pagrindinės gijos. Tai ypač naudinga tokioms užduotims kaip modelių įkėlimas ar duomenų apdorojimas.
Pavyzdys: Duomenų vizualizavimo prietaisų skydelis, kuriame atliekamas didelio duomenų rinkinio apdorojimas. Duomenų apdorojimo ir galbūt buferio duomenų paruošimo perkėlimas į „Web Worker“ išlaikytų pagrindinę giją laisvą WebGL atvaizdavimui, pagerinant vartotojo sąsajos reakciją, ypač vartotojams su lėtesniais įrenginiais ar interneto ryšiu.
Įrankiai ir metodai našumui matuoti ir stebėti
Optimizavimas yra iteracinis procesas. Našumo matavimas ir stebėjimas yra labai svarbūs norint nustatyti kliūtis ir patvirtinti optimizavimo pastangas. Gali padėti keli įrankiai ir metodai:
- Naršyklės kūrėjų įrankiai: Naudokite integruotus kūrėjų įrankius naršyklėse, tokiose kaip Chrome, Firefox, Safari ir Edge. Šie įrankiai suteikia JavaScript ir WebGL profiliavimo galimybes, leidžiančias nustatyti našumo kliūtis jūsų kode ir matuoti kadrų dažnį (FPS), piešimo iškvietimus ir kitus rodiklius.
- WebGL derintuvo plėtiniai: Įdiekite WebGL derinimo plėtinius savo naršyklei (pvz., WebGL Inspector, skirtą Chrome ir Firefox). Šie plėtiniai siūlo pažangias derinimo galimybes, įskaitant galimybę tikrinti šešėlių kodą, peržiūrėti tekstūrų duomenis ir išsamiai analizuoti piešimo iškvietimus.
- Našumo metrikos API: Naudokite `performance.now()` API JavaScript'e, kad išmatuotumėte konkrečių kodo sekcijų vykdymo laiką. Tai leidžia tiksliai nustatyti konkrečių operacijų poveikį našumui.
- Kadrų dažnio skaitikliai: Įdiekite paprastą kadrų dažnio skaitiklį, kad stebėtumėte programos našumą. Sekite atvaizduojamų kadrų skaičių per sekundę (FPS), kad įvertintumėte optimizavimo pastangų efektyvumą.
- GPU profiliavimo įrankiai: Naudokite specializuotus GPU profiliavimo įrankius, jei jie yra prieinami jūsų įrenginyje. Šie įrankiai suteikia išsamesnės informacijos apie GPU našumą, įskaitant atminties pralaidumo naudojimą, šešėlių našumą ir kt.
- Etaloninis testavimas: Sukurkite etaloninius testus, kad įvertintumėte savo programos našumą įvairiomis sąlygomis. Vykdykite šiuos testus skirtinguose įrenginiuose ir naršyklėse, kad užtikrintumėte nuoseklų našumą visose platformose.
Pavyzdys: Prieš paleidžiant pasaulinį produktų konfigūratorių, kruopščiai profiliuokite programą naudodami Chrome DevTools našumo skirtuką. Išanalizuokite WebGL atvaizdavimo laikus, nustatykite bet kokias ilgai trunkančias operacijas ir jas optimizuokite. Bandymų metu rinkose, tokiose kaip Europa ir Amerika, naudokite FPS skaitiklius, kad užtikrintumėte nuoseklų našumą esant skirtingoms įrenginių konfigūracijoms.
Daugiaplatformiai aspektai ir pasaulinis poveikis
Optimizuojant WebGL programas pasaulinei auditorijai, būtina atsižvelgti į daugiaplatformį suderinamumą ir įvairias įrenginių galimybes visame pasaulyje.
- Įrenginių įvairovė: Vartotojai naudosis jūsų programa įvairiausiuose įrenginiuose, nuo aukščiausios klasės žaidimų kompiuterių iki mažos galios išmaniųjų telefonų. Išbandykite savo programą įvairiuose įrenginiuose su skirtingomis ekrano raiškos, GPU galimybėmis ir atminties apribojimais.
- Naršyklių suderinamumas: Užtikrinkite, kad jūsų WebGL programa būtų suderinama su naujausiomis populiarių naršyklių (Chrome, Firefox, Safari, Edge) versijomis skirtingose operacinėse sistemose (Windows, macOS, Android, iOS).
- Optimizavimas mobiliesiems įrenginiams: Mobilieji įrenginiai dažnai turi ribotą GPU atminties pralaidumą ir apdorojimo galią. Optimizuokite savo programą specialiai mobiliesiems įrenginiams, naudodami tekstūrų suspaudimą, modelių supaprastinimą ir kitas mobiliesiems skirtas optimizavimo technikas.
- Tinklo sąlygos: Atsižvelkite į tinklo sąlygas skirtinguose regionuose. Kai kuriose srityse vartotojai gali turėti lėtesnį interneto ryšį. Optimizuokite savo programą, kad sumažintumėte perduodamų duomenų kiekį ir laiką, reikalingą ištekliams įkelti.
- Lokalizavimas: Jei jūsų programa naudojama visame pasaulyje, apsvarstykite galimybę lokalizuoti turinį ir vartotojo sąsają, kad palaikytumėte skirtingas kalbas ir kultūras. Tai pagerins vartotojo patirtį vartotojams skirtingose šalyse.
Pavyzdys: WebGL pagrindu sukurtas interaktyvus žemėlapis, rodantis realaus laiko oro informaciją visame pasaulyje. Optimizuokite programą mobiliesiems įrenginiams, naudodami suspaustas tekstūras ir modelių supaprastinimą. Siūlykite skirtingus detalumo lygius, atsižvelgiant į įrenginio galimybes ir tinklo sąlygas. Pateikite vartotojo sąsają, lokalizuotą skirtingoms kalboms ir kultūriniams pageidavimams. Išbandykite našumą šalyse su skirtingomis infrastruktūros sąlygomis, kad užtikrintumėte sklandžią patirtį visame pasaulyje.
Išvada: nuolatinis optimizavimas siekiant WebGL tobulumo
GPU atminties pralaidumo optimizavimas yra labai svarbus kuriant didelio našumo WebGL programas. Suprasdami kliūtis ir įgyvendindami šiame tinklaraščio įraše aprašytas technikas, galite žymiai pagerinti savo WebGL programų našumą ir suteikti geresnę vartotojo patirtį pasaulinei auditorijai. Atminkite, kad optimizavimas yra nuolatinis procesas. Nuolat stebėkite našumą, eksperimentuokite su skirtingomis technikomis ir sekite naujausius WebGL pokyčius bei geriausias praktikas. Gebėjimas teikti aukštos kokybės grafikos patirtis įvairiuose įrenginiuose ir tinkluose yra raktas į sėkmę šiandieninėje interneto aplinkoje. Nuolat siekdami optimizavimo, galite užtikrinti, kad jūsų WebGL programos būtų ir vizualiai stulbinančios, ir našios, tenkinančios pasaulinės auditorijos poreikius ir skatinančios teigiamą vartotojo patirtį visose demografinėse grupėse ir pasaulio regionuose. Optimizavimo kelionė yra naudinga visiems, nuo galutinių vartotojų Azijoje iki kūrėjų Šiaurės Amerikoje, nes WebGL tampa prieinamas ir našus visame pasaulyje.